Παραθέτω τις επαφές από την υπηρεσία Web και τις εμφανίζω στις επαφές «τμηματικές» tableView όπως φαίνεται στο στιγμιότυπο οθόνης. Το ζήτημα είναι ότι λαμβάνω τις ίδιες τιμές ετικέτας για τα πλαίσια ελέγχου της πρώτης γραμμής για την ενότητα Α καθώς και την ενότητα S. Έχω ταξινομήσει έναν πίνακα και εμφανίζεται στην προβολή πίνακα ευρετηρίου. Πώς να λάβετε διαφορετικές τιμές ετικετών ανάλογα με το indexPath.row ανεξάρτητα από τον αριθμό των ενοτήτων που εμφανίζονται. Εδώ έχω δοκιμάσει Στο cellForRowAtIndexPath: UIButton * checkBox; εάν (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPhone) { checkBox = [[UIButton assign] initWithFrame: CGRectMake (7, 8, 30, 30)]; } αλλού { checkBox = [[UIButton assign] initWithFrame: CGRectMake (15, 13, 30, 30)] } // int cnt = 0; // για (int i = indexPath.section - 1; i> 0; i--) // { // cnt + = [[ObjectForCharacters objectForKey: [arrayOfCharacters objectAtIndex: i]] count]; // arrayOfCharachters έχει char 'A' έως 'Z' //} //checkBox.tag = cnt + indexPath.row; [checkBox setImage: [UIImage imageNamed: @ "checkBox.png"] γιαState: UIControlStateNormal]; [checkBox addTarget: self action: @selector (checkBoxClicked :) forControlEvents: UIControlEventTouchUpInside]; [checkBox setTag: indexPath.row]; [cell.contentView addSubview: checkBox]; επιστροφή κελιού; } - (void) checkBoxClicked: (id) αποστολέας { CGPoint buttonPosition = [sender convertPoint: CGPointZero toView: self.tableViewContact]; NSIndexPath * indexPath = [self.tableViewContact indexPathForRowAtPoint: buttonPosition]; Αποστολέας UIButton * tappedButton = (UIButton *); NSLog (@ "Αριθμός ετικέτας =% d", [ετικέτα αποστολέα]); αν ([tappedButton.currentImage isEqual: [UIImage imageNamed: @ "checkBox.png"]]) { [sender setImage: [UIImage imageNamed: @ "checkBoxMarked.png"] forState: UIControlStateNormal]; αν (indexPath! = Μηδέν) { NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; // αποθήκευση αναγνωριστικών πλαισίου ελέγχου στο mutableArrayOfIds NSLog (@ "Ετικέτα με επιλεγμένο κουμπί id =% @", finalIntId); [arrayOfIds addObject: finalIntId]; } // NSString * finalIntId = [mutableArrayOfIds objectAtIndex: tappedButton.tag]; // NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; } αλλού { [sender setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal]; NSLog (@ "UnChecked"); // [arrayOfIds removeObjectAtIndex: tappedButton.tag]; } } - (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) ενότητα { εάν ([arrayOfCharacters count] == 0) { ΕΠΙΣΤΡΟΦΗ @""; } επιστροφή [NSString stringWithFormat: @ "% @", [arrayOfCharacters objectAtIndex: section]]; } - (NSArray *) sectionIndexTitlesForTableView: (UITableView *) tableView { NSArray * toBeReturned = [NSArray arrayWithArray: [@ "A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Υ | Ζ | # " componentsSeparatedByString: @ "|"]]; επιστροφή στοBeReturned; } - (NSInteger) tableView: (UITableView *) tableView sectionForSectionIndexTitle: (NSString *) title atIndex: (NSInteger) index { NSInteger count = 0; για (NSString * χαρακτήρας στο arrayOfCharacters) { if ([χαρακτήρας isEqualToString: title]) { μέτρηση επιστροφής; } μέτρηση ++; } επιστροφή 0; } - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView { επιστροφή [αριθμός arrayOfCharacters]; // επιστροφή 1; } - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) ενότητα { // επιστροφή [mutableArray count]; επιστροφή [[ObjectForCharacters objectForKey: [arrayOfCharacters objectAtIndex: section]] count]; }
2020-12-07 22:54:54
ορίζετε την ίδια τιμή ετικέτας για όλες τις ενότητες που έχουν την ίδια σειρά. Το indexPath έχει δύο ιδιότητες, {ενότητα, σειρά}. Ας πούμε ότι η ενότητα Α έχει δύο σειρές, για τη σειρά1 -> indexPath.section = 0, indexPath.row = 0; για το قطار2-> indexPath.section = 0, indexPath.row = 1; Ας πούμε ότι το τμήμα S έχει δύο σειρές, για τη σειρά1 -> indexPath.section = 1, indexPath.row = 0; για το قطار2-> indexPath.section = 1, indexPath.row = 1; Έτσι, για τη σειρά1 της ενότητας Α και τη γραμμή 1 της ενότητας S, ρυθμίζετε την ίδια τιμή ετικέτας που είναι 0. Υπάρχει το πρόβλημά σας Δοκιμάστε να ορίσετε την τιμή της ετικέτας όπως παρακάτω. button.tag = indexPath.section * 1000 + indexPath.row; κατά την ανάκτηση της ενότητας και της γραμμής, NSInteger section = (button.tag) / 1000; NSInteger σειρά = (button.tag)% 1000; | Δοκιμάστε αυτό... - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { στατικό NSString * CellIdentifier = @ "Cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; αν (κελί == μηδέν) { cell = [[UITableViewCell assign] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; } UIButton * checkBox = [[UIButton assign] initWithFrame: CGRectMake (280, 10, 50, 44)]; checkBox.backgroundColor = [UIColor πορτοκαλί χρώμα]; [checkBox addTarget: self action: @selector (checkBoxClicked: event:) forControlEvents: UIControlEventTouchUpInside]; [checkBox setTag: indexPath.row]; [cell.contentView addSubview: checkBox]; επιστροφή κελιού; } - (void) checkBoxClicked: (id) συμβάν αποστολέα: (id) συμβάν { NSSet * αγγίζει = [event allTouches]; UITouch * touch = [αγγίζει οποιοδήποτε αντικείμενο]; CGPoint currentTouchPosition = [touch locationInView: self.tv]; // εδώ η τηλεόραση είναι αντικείμενο TableView NSIndexPath * indexPath = [self.tv indexPathForRowAtPoint: currentTouchPosition]; NSLog (@ "τιμή του indePath.section% d, indexPath.row% d", indexPath.section, indexPath.row); } | Αυτό συμβαίνει επειδή εκχωρείτε ετικέτα στα κουμπιά ΑΝΕΞΑΡΤΗΤΟ των ενοτήτων. Και οι δύο από την πρώτη σειρά των τμημάτων A & S έχουν σειρά = 0. οπότε η ετικέτα που έχει αντιστοιχιστεί στο αντίστοιχο κουμπί είναι 0. Πρέπει να τους αντιστοιχίσετε Διατηρώντας τις ενότητες σας. Θα πρότεινα να εκχωρήσετε υπόδειξη προσβασιμότητας με διαχωρισμένη με κόμμα φόρμα που περιέχει Ενότητα, Σειρά. Και στη μέθοδο σας - (void) checkBoxClicked: (id) αποστολέας { // επιλέξτε συμβολοσειρά από φόρμα διαχωρισμένη με κόμμα. 1η είναι η ενότητα σας, 2η είναι σειρά. } Η δεύτερη επιλογή είναι να κάνετε ό, τι κάνετε ποτέ και να εφαρμόσετε τη μέθοδο του κουμπιού σας έτσι. CGPoint buttonPosition = [sender convertPoint: CGPointZero toView: self.tableView]; NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: buttonPosition]; αν (indexPath! = μηδέν) { ... indexpath.section είναι το τμήμα σας, το index path.row είναι η σειρά σας. } Υπάρχει και η τρίτη επιλογή. στο cellforRowAtIndexpath εκχωρήστε έναν τίτλο στο κουμπί σας - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath [btn setTitle: <# Your Row #> forState: UIControlStateDisabled]; [btn setTag <#Your Section #>]; οπότε κατά τη λήψη με τη μέθοδο του κουμπιού μπορείτε να έχετε τόσο το τμήμα (ετικέτα) όσο και τη σειρά (τίτλος για κατάσταση με ειδικές ανάγκες). - (void) checkBoxClicked: (id) αποστολέας {[button titleForState: UIControlStateDisabled]; // η σειρά σας button.tag // το τμήμα σας} | Δοκιμάστε αυτό! Κάθε ενότητα μπορεί να γνωρίζετε το πλήθος της ενότητας σωστά και, στη συνέχεια, να προσθέσετε τον αριθμό των μεμονωμένων σειρών. [[fieldTitlesList objectAtIndex: indexPath.section - 1] count] + indexPath.row Όπου το fieldTitlesList είναι ο πίνακας των ενοτήτων σας. | Πρόσθεσα τον ακόλουθο κώδικα που έλυσε το πρόβλημά μου NSInteger rowNumber = 0; για (NSInteger i = 0; i